1 //+------------------------------------------------------------------+
\r
2 //| Center of Gravity.mq4 |
\r
3 //| Original Code from NG3110@latchess.com |
\r
4 //| Modified for THV system by Cobraforex, www.cobraforex.com |
\r
5 //+------------------------------------------------------------------+
\r
6 #property copyright "ANG3110@latchess.com"
\r
7 //---------ang_PR (Din)--------------------
\r
8 #property indicator_chart_window
\r
9 #property indicator_buffers 5
\r
10 #property indicator_color1 Black
\r
11 #property indicator_color2 FireBrick
\r
12 #property indicator_color3 DarkGreen
\r
13 #property indicator_color4 Black
\r
14 #property indicator_color5 Black
\r
15 //-----------------------------------
\r
16 extern int bars_back = 120;
\r
19 extern double kstd = 2.0;
\r
20 extern int sName = 720;
\r
21 //-----------------------
\r
22 double fx[], sqh[], sql[], stdh[], stdl[];
\r
23 double ai[10,10], b[10], x[10], sx[20];
\r
27 int ii, jj, kk, ll, nn;
\r
29 //*******************************************
\r
32 IndicatorShortName("COG THV");
\r
33 SetIndexStyle(0, DRAW_LINE);
\r
34 SetIndexBuffer(0, fx);
\r
35 SetIndexBuffer(1, sqh);
\r
36 SetIndexBuffer(2, sql);
\r
37 SetIndexBuffer(3, stdh);
\r
38 SetIndexBuffer(4, stdl);
\r
39 p = MathRound(bars_back);
\r
41 ObjectCreate("pr" + sName, 22, 0, Time[p], fx[p]);
\r
42 ObjectSet("pr" + sName, 14, 159);
\r
45 //----------------------------------------------------------
\r
48 ObjectDelete("pr" + sName);
\r
50 //**********************************************************************************************
\r
54 //-------------------------------------------------------------------------------------------
\r
55 ip = iBarShift(Symbol(), Period(), ObjectGet("pr" + sName, OBJPROP_TIME1));
\r
58 SetIndexDrawBegin(0, Bars - p - 1);
\r
59 SetIndexDrawBegin(1, Bars - p - 1);
\r
60 SetIndexDrawBegin(2, Bars - p - 1);
\r
61 SetIndexDrawBegin(3, Bars - p - 1);
\r
62 SetIndexDrawBegin(4, Bars - p - 1);
\r
63 //----------------------sx-------------------------------------------------------------------
\r
64 for(mi = 1; mi <= nn * 2 - 2; mi++)
\r
67 for(n = i; n <= i + p; n++)
\r
69 sum += MathPow(n, mi);
\r
73 //----------------------syx-----------
\r
74 for(mi = 1; mi <= nn; mi++)
\r
77 for(n = i; n <= i + p; n++)
\r
82 sum += Close[n] * MathPow(n, mi - 1);
\r
86 //===============Matrix=======================================================================================================
\r
87 for(jj = 1; jj <= nn; jj++)
\r
89 for(ii = 1; ii <= nn; ii++)
\r
92 ai[ii, jj] = sx[kk];
\r
95 //===============Gauss========================================================================================================
\r
96 for(kk = 1; kk <= nn - 1; kk++)
\r
99 for(ii = kk; ii <= nn; ii++)
\r
101 if(MathAbs(ai[ii, kk]) > mm)
\r
103 mm = MathAbs(ai[ii, kk]);
\r
112 for(jj = 1; jj <= nn; jj++)
\r
115 ai[kk, jj] = ai[ll, jj];
\r
118 tt = b[kk]; b[kk] = b[ll]; b[ll] = tt;
\r
120 for(ii = kk + 1; ii <= nn; ii++)
\r
122 qq = ai[ii, kk] / ai[kk, kk];
\r
123 for(jj = 1; jj <= nn; jj++)
\r
128 ai[ii, jj] = ai[ii, jj] - qq * ai[kk, jj];
\r
130 b[ii] = b[ii] - qq * b[kk];
\r
133 x[nn] = b[nn] / ai[nn, nn];
\r
134 for(ii = nn - 1; ii >= 1; ii--)
\r
137 for(jj = 1; jj <= nn - ii; jj++)
\r
139 tt = tt + ai[ii, ii + jj] * x[ii + jj];
\r
140 x[ii] = (1 / ai[ii, ii]) * (b[ii] - tt);
\r
143 //===========================================================================================================================
\r
144 for(n = i; n <= i + p; n++)
\r
147 for(kk = 1; kk <= m; kk++)
\r
149 sum += x[kk + 1] * MathPow(n, kk);
\r
151 fx[n] = x[1] + sum;
\r
153 //-----------------------------------Std-----------------------------------------------------------------------------------
\r
155 for(n = i; n <= i + p; n++)
\r
157 sq += MathPow(Close[n] - fx[n], 2);
\r
159 sq = MathSqrt(sq / (p + 1)) * kstd;
\r
160 std = iStdDev(NULL, 0, p, MODE_SMA, 0, PRICE_CLOSE, i) * kstd;
\r
161 for(n = i; n <= i + p; n++)
\r
163 sqh[n] = fx[n] + sq;
\r
164 sql[n] = fx[n] - sq;
\r
165 stdh[n] = fx[n] + std;
\r
166 stdl[n] = fx[n] - std;
\r
168 //-------------------------------------------------------------------------------
\r
169 ObjectMove("pr" + sName, 0, Time[p], fx[p]);
\r
170 //----------------------------------------------------------------------------------------------------------------------------
\r
173 //==========================================================================================================================
\r